const handleErrorResponse = (status) => {
  switch (status) {
    case 400:
      console.error('错误请求 - 服务器无法理解由于语法错误的请求。');
      break;
    case 401:
      console.error('未授权访问 - 可能需要登录。');
      break;
    case 403:
      console.error('禁止访问 - 您没有权限访问此资源。');
      break;
    case 404:
      console.error('资源未找到。');
      break;
    case 500:
      console.error('服务器内部错误 - 服务器遇到错误，无法完成请求。');
      break;
    case 502:
      console.error('错误网关 - 服务器作为网关或代理，从上游服务器收到无效响应。');
      break;
    case 503:
      console.error('服务不可用 - 服务器目前无法使用。');
      break;
    case 504:
      console.error('网关超时 - 服务器作为网关或代理，未能及时从上游服务器收到响应。');
      break;
    default:
      console.error(`HTTP 错误！状态码: ${status}`);
  }
}

export const fetchData = (() => {
  let timer = null;

  return (url, options = {}, delay = 100) => {
    clearTimeout(timer);

    return new Promise((resolve, reject) => {
      timer = setTimeout(async () => {
        try {
          const token = 'your-token-here'; // 这里替换为实际的 token 获取逻辑
          const defaultHeaders = {
            'Content-Type': 'application/json',
            Authorization: `Bearer ${token}`
          };

          const defaultOptions = {
            method: 'GET',
            headers: defaultHeaders,
            body: null
          };

          const finalOptions = {
            ...defaultOptions,
            ...options,
            headers: {
              ...defaultHeaders,
              ...options.headers
            }
          };

          if (finalOptions.method.toUpperCase() === 'GET') {
            delete finalOptions.body;
          }
          console.log('finalOptions', finalOptions)
          const response = await fetch(url, finalOptions);

          if (!response.ok) {
            handleErrorResponse(response.status);
            reject(new Error(`HTTP error! Status: ${response.status}`));
          }

          const data = await response.json();
          resolve(data);
        } catch (error) {
          console.error('Fetch error:', error);
          reject(error);
        }
      }, delay);
    });
  };
})(); 